This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
You can also embed plots, for example:
library(tidyverse)
## -- Attaching packages ---------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.0 v purrr 0.3.4
## v tibble 3.0.1 v dplyr 0.8.5
## v tidyr 1.0.2 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.5.0
## -- Conflicts ------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(janitor)
##
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(stringr)
library(tidyverse)
library(gganimate)
library(png)
options(warn = - 1)
gdp <- read.csv("GDP_Data.csv")
str(gdp)
## 'data.frame': 269 obs. of 16 variables:
## $ ï..Series.Name: chr "GDP (current US$)" "GDP (current US$)" "GDP (current US$)" "GDP (current US$)" ...
## $ Series.Code : chr "NY.GDP.MKTP.CD" "NY.GDP.MKTP.CD" "NY.GDP.MKTP.CD" "NY.GDP.MKTP.CD" ...
## $ Country.Name : chr "Afghanistan" "Albania" "Algeria" "American Samoa" ...
## $ Country.Code : chr "AFG" "ALB" "DZA" "ASM" ...
## $ X1990..YR1990.: chr ".." "2028553750" "62045099642.7774" ".." ...
## $ X2000..YR2000.: chr ".." "3480355258.04122" "54790245600.5846" ".." ...
## $ X2009..YR2009.: chr "12439087076.7667" "12044208085.864" "137211039898.193" "678000000" ...
## $ X2010..YR2010.: chr "15856574731.4411" "11926957254.6288" "161207268655.392" "576000000" ...
## $ X2011..YR2011.: chr "17804292964.1045" "12890866742.6533" "200019057307.655" "574000000" ...
## $ X2012..YR2012.: chr "19907317065.6667" "12319784886.2038" "209058991952.125" "644000000" ...
## $ X2013..YR2013.: chr "20561069558.2152" "12776280961.155" "209755003250.664" "641000000" ...
## $ X2014..YR2014.: chr "20484885119.7348" "13228247844.1247" "213810022462.428" "643000000" ...
## $ X2015..YR2015.: chr "19907111418.9938" "11386931489.7968" "165979277276.907" "661000000" ...
## $ X2016..YR2016.: chr "19046357714.4928" "11883682170.8236" "160129866569.935" "653000000" ...
## $ X2017..YR2017.: chr "19543976895.4248" "13038538300.2644" "167555280113.181" "634000000" ...
## $ X2018..YR2018.: chr ".." ".." ".." ".." ...
head(gdp)
## ï..Series.Name Series.Code Country.Name Country.Code X1990..YR1990.
## 1 GDP (current US$) NY.GDP.MKTP.CD Afghanistan AFG ..
## 2 GDP (current US$) NY.GDP.MKTP.CD Albania ALB 2028553750
## 3 GDP (current US$) NY.GDP.MKTP.CD Algeria DZA 62045099642.7774
## 4 GDP (current US$) NY.GDP.MKTP.CD American Samoa ASM ..
## 5 GDP (current US$) NY.GDP.MKTP.CD Andorra AND 1029048481.88051
## 6 GDP (current US$) NY.GDP.MKTP.CD Angola AGO 11228764963.1618
## X2000..YR2000. X2009..YR2009. X2010..YR2010. X2011..YR2011.
## 1 .. 12439087076.7667 15856574731.4411 17804292964.1045
## 2 3480355258.04122 12044208085.864 11926957254.6288 12890866742.6533
## 3 54790245600.5846 137211039898.193 161207268655.392 200019057307.655
## 4 .. 678000000 576000000 574000000
## 5 1434429703.33518 3660530702.97305 3355695364.23841 3442062830.13622
## 6 9129594818.60749 70307163678.1895 83799496611.6049 111789686464.26
## X2012..YR2012. X2013..YR2013. X2014..YR2014. X2015..YR2015.
## 1 19907317065.6667 20561069558.2152 20484885119.7348 19907111418.9938
## 2 12319784886.2038 12776280961.155 13228247844.1247 11386931489.7968
## 3 209058991952.125 209755003250.664 213810022462.428 165979277276.907
## 4 644000000 641000000 643000000 661000000
## 5 3164615186.94591 3281585236.32501 3350736367.25488 2811489408.89431
## 6 128052853643.447 136709862831.308 145712200312.505 116193649124.475
## X2016..YR2016. X2017..YR2017. X2018..YR2018.
## 1 19046357714.4928 19543976895.4248 ..
## 2 11883682170.8236 13038538300.2644 ..
## 3 160129866569.935 167555280113.181 ..
## 4 653000000 634000000 ..
## 5 2877311946.90265 3012914131.16971 ..
## 6 101123851090.473 122123822333.73 ..
#select required columns
gdp <- gdp %>% select(3:15)
#filter only country rows
gdp <- gdp[1:217,]
gdp_tidy <- gdp %>%
mutate_at(vars(contains("YR")),as.numeric) %>%
gather(year,value,3:13) %>%
janitor::clean_names() %>% #fix column name
mutate(year = as.numeric(stringr::str_sub(year,1,4)))
summary(gdp_tidy)
## country_name country_code year value
## Length:2387 Length:2387 Min. : NA Min. :8.824e+06
## Class :character Class :character 1st Qu.: NA 1st Qu.:4.435e+09
## Mode :character Mode :character Median : NA Median :2.020e+10
## Mean :NaN Mean :3.241e+11
## 3rd Qu.: NA 3rd Qu.:1.384e+11
## Max. : NA Max. :1.939e+13
## NA's :2387 NA's :193
str(gdp_tidy)
## 'data.frame': 2387 obs. of 4 variables:
## $ country_name: chr "Afghanistan" "Albania" "Algeria" "American Samoa" ...
## $ country_code: chr "AFG" "ALB" "DZA" "ASM" ...
## $ year : num NA NA NA NA NA NA NA NA NA NA ...
## $ value : num NA 2.03e+09 6.20e+10 NA 1.03e+09 ...
head(gdp_tidy)
## country_name country_code year value
## 1 Afghanistan AFG NA NA
## 2 Albania ALB NA 2028553750
## 3 Algeria DZA NA 62045099643
## 4 American Samoa ASM NA NA
## 5 Andorra AND NA 1029048482
## 6 Angola AGO NA 11228764963
gdp_tidy <- read_csv("gdp_tidy.csv")
## Parsed with column specification:
## cols(
## country_name = col_character(),
## country_code = col_character(),
## year = col_double(),
## value = col_double()
## )
summary(gdp_tidy)
## country_name country_code year value
## Length:2387 Length:2387 Min. :1990 Min. :8.824e+06
## Class :character Class :character 1st Qu.:2009 1st Qu.:4.435e+09
## Mode :character Mode :character Median :2012 Median :2.020e+10
## Mean :2010 Mean :3.241e+11
## 3rd Qu.:2015 3rd Qu.:1.384e+11
## Max. :2017 Max. :1.939e+13
## NA's :193
str(gdp_tidy)
## tibble [2,387 x 4] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ country_name: chr [1:2387] "Afghanistan" "Albania" "Algeria" "American Samoa" ...
## $ country_code: chr [1:2387] "AFG" "ALB" "DZA" "ASM" ...
## $ year : num [1:2387] 1990 1990 1990 1990 1990 1990 1990 1990 1990 1990 ...
## $ value : num [1:2387] NA 2.03e+09 6.20e+10 NA 1.03e+09 ...
## - attr(*, "spec")=
## .. cols(
## .. country_name = col_character(),
## .. country_code = col_character(),
## .. year = col_double(),
## .. value = col_double()
## .. )
head(gdp_tidy)
## # A tibble: 6 x 4
## country_name country_code year value
## <chr> <chr> <dbl> <dbl>
## 1 Afghanistan AFG 1990 NA
## 2 Albania ALB 1990 2028553750
## 3 Algeria DZA 1990 62045099643.
## 4 American Samoa ASM 1990 NA
## 5 Andorra AND 1990 1029048482.
## 6 Angola AGO 1990 11228764963.
gdp_formatted <- gdp_tidy %>%
group_by(year) %>%
# The * 1 makes it possible to have non-integer ranks while sliding
mutate(rank = rank(-value),
Value_rel = value/value[rank==1],
Value_lbl = paste0(" ",round(value/1e9))) %>%
group_by(country_name) %>%
filter(rank <=10) %>%
ungroup()
staticplot = ggplot(gdp_formatted, aes(rank, group = country_name,
fill = as.factor(country_name), color = as.factor(country_name))) +
geom_tile(aes(y = value/2,
height = value,
width = 0.9), alpha = 0.8, color = NA) +
geom_text(aes(y = 0, label = paste(country_name, " ")), vjust = 0.2, hjust = 1) +
geom_text(aes(y=value,label = Value_lbl, hjust=0)) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
theme(axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
legend.position="none",
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.grid.major.x = element_line( size=.1, color="grey" ),
panel.grid.minor.x = element_line( size=.1, color="grey" ),
plot.title=element_text(size=25, hjust=0.5, face="bold", colour="grey", vjust=-1),
plot.subtitle=element_text(size=18, hjust=0.5, face="italic", color="grey"),
plot.caption =element_text(size=8, hjust=0.5, face="italic", color="grey"),
plot.background=element_blank(),
plot.margin = margin(2,2, 2, 4, "cm"))
anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'GDP per Year : {closest_state}',
subtitle = "Top 10 Countries",
caption = "GDP in Billions USD | Data Source: World Bank Data")
# For GIF
animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = gifski_renderer("gganim.gif"))